<template>
  <el-container>
    <el-aside width="250px">
      <div class="avatar" @click="goHome">
        <img src="@/assets/avatar.jpg" />
      </div>
      <p class="description">陈鹏飞的博客</p>
      <p class="bb">偶尔扯淡</p>
      <ul>
        <li
          v-for="(item, i) in list"
          :key="item.icon"
          class="articleTitle"
          @click="switchTitle({ item, i })"
          :class="item.active ? 'active' : ''"
        >
          <i :class="item.icon"></i>
          <span class="title">{{ item.name }}</span
          ><span class="count" v-if="item.count">({{ item.count }})</span>
        </li>
      </ul>
    </el-aside>
    <el-main>
      <router-view v-if="this.$route.path !== '/'"></router-view>
      <template v-else>
        <div class="container" v-for="item in preview" :key="item.id">
          <div>
            <h1
              class="title"
              @click="goReadArticle({ type: item.type, id: item.id })"
            >
              {{ item.title }}
            </h1>
          </div>
          <div class="time">发布于 {{ item.time }}</div>
          <p class="content">{{ item.content }}</p>
          <div class="descript" @click="goDescript(item.type)">
            [ {{ item.descript }} ]
          </div>
          <div
            class="read"
            @click="goReadArticle({ type: item.type, id: item.id })"
          >
            阅读全文 >>
          </div>
          <span></span>
        </div>
      </template>
      <my-footer />
    </el-main>
  </el-container>
</template>

<script>
import myFooter from "@/components/MyFooter.vue";
export default {
  name: "index",
  components: {
    myFooter, //底部组件
  },
  data() {
    return {
      list: [
        //侧边栏
        {
          icon: "el-icon-s-home",
          name: "首页",
          count: 0,
          active: true,
          path: "/",
          type: "",
        },
        {
          icon: "el-icon-cpu",
          name: "网络",
          count: 10,
          active: false,
          path: "/type/net",
          type: "net",
        },
        {
          icon: "el-icon-mobile-phone",
          name: "前端",
          count: 20,
          active: false,
          path: "/type/front",
          type: "front",
        },
        {
          icon: "el-icon-key",
          name: "进制",
          count: 30,
          active: false,
          path: "/type/binary",
          type: "binary",
        },
        {
          icon: "el-icon-edit",
          name: "学习",
          count: 10,
          active: false,
          path: "/type/study",
          type: "study",
        },
      ],
      preview: [
        //首页右边的预览
        {
          title: "你们要的学习方法来了",
          time: new Date().toLocaleDateString(),
          content: "学习不应该是沉重的负担，而是愉悦的冒险",
          descript: "学习",
          id: Math.random() * 1000,
          type: "study",
        },
        {
          title: "Promise A+ 规范和解读",
          time: new Date().toLocaleDateString(),
          content: "一开始我想把原文翻译过来即可，后面发现太麻烦了",
          descript: "前端",
          id: Math.random() * 1000,
          type: "front",
        },
        {
          title: "http协议中的缓存",
          time: new Date().toLocaleDateString(),
          content:
            "在一个C/S结构中，最基本的缓存分为两种： 客户端缓存 服务器缓存 本文仅讨论客户端缓存 所谓客户端缓存，顾名思义，是将某一次的响应结果保存在客户端（比如浏览器）中，而后续的请求仅需要从缓存中读取即可，极大的降低了服务器的处理压力。",
          descript: "网络",
          id: Math.random() * 1000,
          type: "net",
        },
        {
          title: "JWT原理详解",
          time: new Date().toLocaleDateString(),
          content:
            "随着前后端分离的发展，以及数据中心的建立，越来越多的公司会创建一个中心服务器，服务于各种产品线。 而这些产品线上的产品，它们可能有着各种终端设备，包括但不仅限于浏览器、桌面应用、移动端应用、平板应用、甚至智能家居。 当这种结构出现后，就出现一个问题：它们之间还能使用传统的cookie方式传递令牌信息吗？",
          descript: "网络",
          id: Math.random() * 1000,
          type: "net",
        },
        {
          title: "JWT原理详解",
          time: new Date().toLocaleDateString(),
          content:
            "随着前后端分离的发展，以及数据中心的建立，越来越多的公司会创建一个中心服务器，服务于各种产品线。 而这些产品线上的产品，它们可能有着各种终端设备，包括但不仅限于浏览器、桌面应用、移动端应用、平板应用、甚至智能家居。 当这种结构出现后，就出现一个问题：它们之间还能使用传统的cookie方式传递令牌信息吗？",
          descript: "网络",
          id: Math.random() * 1000,
          type: "net",
        },
        {
          title: "JWT原理详解",
          time: new Date().toLocaleDateString(),
          content:
            "随着前后端分离的发展，以及数据中心的建立，越来越多的公司会创建一个中心服务器，服务于各种产品线。 而这些产品线上的产品，它们可能有着各种终端设备，包括但不仅限于浏览器、桌面应用、移动端应用、平板应用、甚至智能家居。 当这种结构出现后，就出现一个问题：它们之间还能使用传统的cookie方式传递令牌信息吗？",
          descript: "网络",
          id: Math.random() * 1000,
          type: "net",
        },
        {
          title: "小数的二进制存储",
          time: new Date().toLocaleDateString(),
          content: "今天我们来学习关于小数的二进制的知识",
          descript: "进制",
          id: Math.random() * 1000,
          type: "binary",
        },
        {
          title: "小数的二进制存储",
          time: new Date().toLocaleDateString(),
          content: "今天我们来学习关于小数的二进制的知识",
          descript: "进制",
          id: Math.random() * 1000,
          type: "binary",
        },
        {
          title: "小数的二进制存储",
          time: new Date().toLocaleDateString(),
          content: "今天我们来学习关于小数的二进制的知识",
          descript: "进制",
          id: Math.random() * 1000,
          type: "binary",
        },
        {
          title: "小数的二进制存储",
          time: new Date().toLocaleDateString(),
          content: "今天我们来学习关于小数的二进制的知识",
          descript: "进制",
          id: Math.random() * 1000,
          type: "binary",
        },
        {
          title: "小数的二进制存储",
          time: new Date().toLocaleDateString(),
          content: "今天我们来学习关于小数的二进制的知识",
          descript: "进制",
          id: Math.random() * 1000,
          type: "binary",
        },
      ],
    };
  },
  methods: {
    switchTitle({ item, i }) {
      //点击侧边栏，跳转页面，更改样式
      this.list.forEach((item) => {
        item.active = false;
      });
      this.list[i].active = true;
      if (this.$route.path !== item.path) {
        this.$router.push({
          //跳转页面
          path: item.path,
        });
      }
    },
    goHome() {
      //点击头像跳转首页
      if (this.$route.path !== "/") {
        this.$router.push("/");
        this.list.forEach((item) => {
          if (item.name === "首页") {
            item.active = true;
          } else {
            item.active = false;
          }
        });
      }
    },
    goDescript(type) {
      //跳转分类页面
      if (this.$route.params.name === type) {
        return;
      }
      this.$router.push("/type/" + type);
      this.list.forEach((item) => {
        if (item.type === type) {
          item.active = true;
        } else {
          item.active = false;
        }
      });
    },
    goReadArticle(obj) {
      //跳转文章详情页
      this.$router.push({
        path: "/article/" + obj.id,
      });
    },
  },
  watch: {
    //侦听路由路径的变化
    "$route.path": {
      handler() {
        let h = this.$route.path.slice(6);
        this.list.forEach((item) => {
          if (item.type === h) {
            item.active = true;
          } else {
            item.active = false;
          }
        });
      },
      immediate: true,
    },
  },
  mounted() {},
};
</script>

<style scoped>
* {
  margin: 0;
  padding: 0;
}
a {
  text-decoration: none;
}
.el-container {
  height: 100%;
}
.el-aside {
  user-select: none;
  background-color: #202020;
  color: #999;
  text-align: center;
  height: 100%;
  position: relative;
}
.avatar {
  width: 150px;
  height: 150px;
  margin-top: 40px;
  margin-left: 50px;
}
.avatar img {
  width: 150px;
  height: 150px;
  border-radius: 50%;
  cursor: pointer;
}
.description {
  margin-top: 10px;
  font-size: 18px;
  color: #fff;
}
.bb {
  margin-top: 20px;
  color: #666;
}
.articleTitle:nth-child(1) {
  margin-top: 20px;
}
.articleTitle {
  width: 100%;
  height: 45px;
  line-height: 45px;
  text-align: left;
  font-size: 18px;
  cursor: pointer;
}
.articleTitle.active {
  background-color: #2479cc;
  color: #fff;
}
.articleTitle i {
  margin-left: 30px;
}
.articleTitle .title {
  margin-left: 30px;
}
.articleTitle .count {
  margin-left: 5px;
}

.el-main {
  padding: 0 40px;
}
.container {
  /* padding-left: 40px;
  padding-right: 40px; */
  position: relative;
  padding-bottom: 40px;
}
.container .title {
  font-size: 32px;
  margin: 20px 0;
  color: #333;
  font-weight: 300;
  width: auto;
  cursor: pointer;
}
.container .title:hover {
  color: #2479cc;
}
.container .time {
  position: absolute;
  top: 0;
  right: 0;
  color: #bbb;
  font-size: 14px;
}
.container .content {
  margin: 10px 0;
  line-height: 1.8;
}
.container .descript {
  position: absolute;
  bottom: 20px;
  color: #2479cc;
  cursor: pointer;
}
.container .read {
  position: absolute;
  bottom: 20px;
  left: 130px;
  color: #2479cc;
  cursor: pointer;
}
.container span {
  position: absolute;
  width: 100%;
  height: 1px;
  background: #ccc;
  bottom: 0;
}
pre {
  padding: 16px;
  overflow: auto;
  font-size: 85%;
  line-height: 1.45;
  background-color: #f6f8fa;
  border-radius: 3px;
}
</style>